System virtualization, the use of multiple virtual machines implemented with a hypervisor on a single host, has grown significantly in recent years. Virtualization allows multiple virtual machines to access shared physical resources while providing an illusion of exclusivity. Typically, a virtual machine manager (VMM) or hypervisor provides a simulation of the underlying hardware, while coordinating access to shared resources among different virtual machines, e.g., guest operating systems (OS's) and applications. For input/output (I/O) operations, the hypervisor facing the virtual machines emulates the input/output device, while the hypervisor also includes a driver for interfacing with the physical input/output device. The hypervisor receives input/output commands for different virtual machines, coordinates the commands, and creates a single input/output stream for sending to the input/output device.
In a more recent approach, virtual machines may have direct access to certain underlying physical resources, including input/output devices, without having to pass through the hypervisor. In addition, systems are now often being optimized specifically for virtualization environments. For example, multiple instances of a single physical resource may be designed into the system and made available for use by different virtual machines. In some cases, it is desirable to have as many instances of the hardware, i.e., a number of copies of a single physical resource, as there are virtual machines in order to have maximum accessibility. However, not all virtual machines require the physical resource at the same time.